import { SysMenu } from '../modules/sys-menu/entities/sys-menu.entity';
import { UserConstants } from '../constants/user-constants';
import { isHttpOrHttpsLink } from './validate';
import { capitalizeFirstLetter, innerLinkReplaceEach } from './conversion';

/**
 * 判断是不是frame
 * @param menu
 */
export function isMenuFrame(menu: SysMenu) {
  return (
    menu.parent_id === 0 &&
    menu.menu_type === UserConstants.TYPE_MENU &&
    String(menu.is_frame) === UserConstants.NO_FRAME
  );
}

/**
 * 获取组件名称
 * @param menu
 */
export function getComponent(menu: SysMenu) {
  let component = UserConstants.LAYOUT;
  if (menu.component && !isMenuFrame(menu)) {
    component = menu.component;
  } else if (
    menu.component &&
    Number(menu.parent_id) !== 0 &&
    isInnerLink(menu)
  ) {
    component = UserConstants.INNER_LINK;
  } else if (menu.component && isParentView(menu)) {
    component = UserConstants.PARENT_VIEW;
  }
  return component;
}

/**
 * 是不是内联
 * @param menu
 */
export function isInnerLink(menu: SysMenu) {
  return (
    String(menu.is_frame) === UserConstants.NO_FRAME &&
    isHttpOrHttpsLink(menu.path)
  );
}

// 是否为parent_view组件
export function isParentView(menu: SysMenu) {
  return (
    Number(menu.parent_id) !== 0 && UserConstants.TYPE_DIR === menu.menu_type
  );
}

/**
 * 获取路由地址
 * @param menu
 */
export function getRouterPath(menu: SysMenu) {
  let routerPath: string = menu.path;
  // 内链打开外网方式
  if (Number(menu.parent_id) != 0 && isInnerLink(menu)) {
    routerPath = innerLinkReplaceEach(routerPath);
  }
  // 非外链并且是一级目录（类型为目录）
  if (
    0 == Number(menu.parent_id) &&
    UserConstants.TYPE_DIR === menu.menu_type
  ) {
    routerPath = '/' + menu.path;
  } else if (isMenuFrame(menu)) {
    // 非外链并且是一级目录（类型为菜单）
    routerPath = '/';
  }
  return routerPath;
}

/**
 * 获取路由名称
 * @param menu
 */
export function getRouteName(menu: SysMenu) {
  let routerName: string = capitalizeFirstLetter(menu.path);
  // 非外链并且是一级目录（类型为目录）
  if (isMenuFrame(menu)) {
    routerName = '';
  }
  return routerName;
}
